// -*- coding: utf-8 -*-

#ifndef HYBRID_EXPR_H
#define HYBRID_EXPR_H

#include "vnode.h"

#include <vector>
#include <boost/function.hpp>

#include "badiff.h"

#include "elisa/elisa_real_expr.h"

#include "hybrid_var.h"

NAMESPACE_ELISA

/**
 * @ingroup Expression
 * @class RealExprRepDot
 * @brief Tree-representation of expressions e'
 */
class RealExprRepDot : public RealExprRepUnaryOp
{
public:
	/**
 	 * Constructor
 	 * @param e sub-term
 	 */
	RealExprRepDot(RealExprRep & e);

	/**
 	 * Constructor
 	 * @param e sub-term
 	 */
	RealExprRepDot(RealExprRep *e);

	/**
 	 * Copy constructor
 	 */
	RealExprRepDot(const RealExprRepSqr& e);

	/// Destructor
	~RealExprRepDot();

	/// @name Base class's virtual methods
	//@{
	void visit(RealExprVisitor & v);

	RealExprRep *copy() const;
	//@}

private:
	/// Copy protection
	RealExprRepDot&
	operator=(const RealExprRepDot& e);
};

END_NAMESPACE_ELISA

#endif // HYBRID_EXPR_H
